package com.ruoyi.htzj.controller;

import com.ruoyi.htzj.domain.HtzjType;
import com.ruoyi.htzj.domain.HtzjContents;
import com.ruoyi.htzj.service.HtzjTypeService;
import com.ruoyi.htzj.service.HtzjContentsService;
import com.ruoyi.common.mybatis.core.page.PageQuery;
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.R;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.dev33.satoken.annotation.SaIgnore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * HtzjType 控制器
 */
@RestController
@RequestMapping("/htzj/htzjType")
public class HtzjTypeController {

    @Autowired
    private HtzjTypeService htzjTypeService;

    @Autowired
    private HtzjContentsService htzjContentsService;

    /**
     * 分页列表查询
     * @param htzjType 查询条件
     * @param pageQuery 分页信息
     * @return 分页结果
     */
    @SaCheckPermission("htzj:htzjType:list")
    @GetMapping("/list")
    public TableDataInfo<HtzjType> list(HtzjType htzjType, PageQuery pageQuery) {
        return htzjTypeService.queryPageList(htzjType, pageQuery);
    }

    /**
     * 下拉列表查询
     * @return 下拉列表数据
     */
    @SaIgnore
    @GetMapping("/selectList")
    public R<List<HtzjType>> selectList() {
        return R.ok(htzjTypeService.list());
    }

    /**
     * 添加 HtzjType
     * @param htzjType 要添加的 HtzjType 对象
     * @return 操作结果
     */
    @SaCheckPermission("htzj:htzjType:add")
    @PostMapping
    public R<String> add(@RequestBody HtzjType htzjType) {
        htzjTypeService.save(htzjType);
        return R.ok("添加成功");
    }

    /**
     * 修改 HtzjType
     * @param htzjType 要修改的 HtzjType 对象
     * @return 操作结果
     */
    @SaCheckPermission("htzj:htzjType:edit")
    @PutMapping
    public R<String> edit(@RequestBody HtzjType htzjType) {
        htzjTypeService.updateById(htzjType);
        return R.ok("修改成功");
    }

    /**
     * 删除 HtzjType
     * @param id 要删除的 HtzjType 的 ID
     * @return 操作结果
     */
    @SaCheckPermission("htzj:htzjType:remove")
    @DeleteMapping("/{id}")
    public R<String> remove(@PathVariable Integer id) {
        HtzjType htzjType = htzjTypeService.getById(id);
        if (htzjType != null) {
            String tag = htzjType.getTag();
            List<HtzjContents> contentsList = htzjContentsService.lambdaQuery()
                .eq(HtzjContents::getContentType, tag)
                .list();
            if (!contentsList.isEmpty()) {
                return R.fail("还有关联数据，不能删除");
            }
            htzjTypeService.removeById(id);
            return R.ok("删除成功");
        }
        return R.fail("未找到对应记录");
    }
}
